#include <stdio.h>
# define MaxSize 100
typedef int DataType;

typedef struct
{
    DataType list[MaxSize];
    int size;
} SeqList;

void ListInitiate(SeqList *L)  /*初始化顺序表L*/
{
    L ->size = 0; /*定义初始数据元素个数*/
}

int ListLength(SeqList L) /*返回顺序表L的当前数据袁术个数*/
{
    return L.size;
}

int ListInsert(SeqList *L, int i, DataType X)
/*在顺序表L的位置i(0 <= i <= size)前插入数据元素值X*/
/*插入成功返回1，插入失败返回0*/
{
    int j;
    if(L->size >= MaxSize)
    {
        printf("顺序表已满无法插入！\n");
        return 0;
    }
    else if(i < 0 || i > L->size)
    {
        printf("参数i不合法！\n");
        return 0;
    }
    else
    {
        for(j = L->size; j > i; j--) L->list[j] = L->list[j - 1];/*为插入做准备*/    /*改错1*/
        L->list[i] = X; /*插入*/
        L->size ++;  /*元素个数加1*/
        return 1;
    }
}

int ListDelete(SeqList *L, int i, DataType *X)
/*删除顺序表L中的位置i(0 <= i <= size - 1)的数据元素值并存放到参数X中*/
/*删除成功返回1，删除失败返回0*/
{
    int j;
    if(L->size <= 0)
    {
        printf("顺序表已空无数据元素可删！\n");
        return 0;
    }
    else if(i < 0 || i > L->size - 1)
    {
        printf("参数i不合法");
        return 0;
    }
    else
    {
        *X = L->list[i];/*保存删除的元素到X中*/
        for(j = i + 1; j <= L->size - 1; j++) L->list[j - 1] = L->list[j]; /*一次前移*/   /*改错2*/
        L->size--; /*数据元素个数减1*/
        return 1;
    }
}

int ListGet(SeqList L, int i, DataType *X)
/*取顺序表L中弟i个数据的值存于X中，成功返回1，失败返回0*/
{
    if(i < 0 || i > L.size - 1)
    {
        printf("参数i不合法！\n");
        return 0;
    }
    else
    {
        *X = L.list[i];
        return 1;
    }
}

int ListSearch(SeqList L, DataType x)
{
    int i;
    for(i = 0; i < L.size; i++)
    {
        if(L.list[i] == x)
            return i;
    }
    return -1;

}


int main(int argc,char * argv[])
{	SeqList myList;
    int i, X, index;
    ListInitiate(&myList);
    for(i = 0; i < 10; i++)
        ListInsert(&myList, i, i+1);
    ListDelete(&myList, 4, &X);

    for(i = 0; i < ListLength(myList); i++)
    {
        ListGet(myList,i,&X);
        printf("%d",X);
    }
    index = ListSearch(myList , 9);
    printf("\n%d\n" , index);
    index = ListSearch(myList , 11);
    printf("\n%d\n" , index);

    return 1;

}